package com.mazaiting.auth.utils;

import com.mazaiting.common.core.constant.ExMessageConst;
import com.mazaiting.redis.service.IRedisStringService;
import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
import org.springframework.util.StringUtils;

/**
 * 验证码工具类
 *
 * @author mazaiting
 * @create_time 2022/9/26 23:19
 */
public class VerifyCodeUtil {
    /**
     * 校验验证码是否正确
     * @param redisStringService redis 服务
     * @param codeKey 验证码键
     * @param code 验证码值
     */
    public static void check(IRedisStringService redisStringService, String codeKey, String code) {
        // 验证码校验逻辑
        if (!StringUtils.hasLength(code)) {
            throw new InvalidGrantException(ExMessageConst.ERROR_VERIFY_CODE_NOT_EMPTY);
        }

        // 从缓存取出正确的验证码和用户输入的验证码比对
        String correctCode = redisStringService.get(codeKey);
        // 判断正确的验证码是否过期
        if (!StringUtils.hasLength(correctCode)) {
            throw new InvalidGrantException(ExMessageConst.ERROR_CODE_EXPIRED);
        }
        // 验证码不正确
        if (!code.equals(correctCode)) {
            throw new InvalidGrantException(ExMessageConst.ERROR_CODE_NOT_CORRECT);
        }

        // 验证码验证通过，删除 Redis 的验证码
        redisStringService.delete(codeKey);
    }
}
